package model;

import model.playingfield.PlayingField;

public interface IModel {
	
	/**
	 * Set a new State for the Model. 
	 * @param state - the new State
	 */
	public void setState(IState state);
	
	/**
	 * Get the current State of the Model, this will (among other things)
	 * be used by Rules in order to facilitate changes to the game as turns
	 * go along.
	 * @return State - the current State of the Model
	 */
	public IState getState();
	
	public Statistics getStatistics();
	
	public PlayingField getPlayingField();
	
	/**
	 * Add a new class fulfilling the IRules interface, in order
	 * to determine how the game should play.
	 * @param rules
	 */
	public void setRules(IRules rules);
	
	/**
	 * move to the next player. Perform checks so that that player actually
	 * exists, and go back to the beginning if the last player is currently playing.
	 * Also, clean up the State after the current turn.
	 */
	public void newTurn();
}
